UDP Packet format:
Rate Limitations:
Sampling rate:
Using the Threshold Scanner:
Documentation:
Here is the table image transcribed
2nd 1 Byte1 [15..8] | 1st 1 Byte1 [7..0] |
---|---|
0xE0 | channel number [7..0] |
0xE[15..12] & trigger arrival time 1 [11..8] | trigger arrival time 1 [7..0] |
0xE[15..12] & trigger arrival time 2 [11..8] | trigger arrival time 2 [7..0] |
0xE[15..12] & logical position [11..8] | logical position [7..6] & physical position [5..0] |
sample 1 data [15..8] | sample 1 data [7..4] & sample 2 data [3..0] |
sample 2 data [15..8] | sample 3 data [7..0] |
sample 3 data [15..12] & sample 4 data [11..8] | sample 4 data [7..0] |
... | ... |
sample 31 data [15..12] & sample 32 data [11..8] | sample 32 data [7..0] |
0x0A | 0x5A |
CRC | packet footer |
... | ... |
0xE0 | channel number [7..0] |
0xE[15..12] & trigger arrival time 1 [11..8] | trigger arrival time 1 [7..0] |
0xE[15..12] & trigger arrival time 2 [11..8] | trigger arrival time 2 [7..0] |
0xE[15..12] & logical position [11..8] | logical position [7..6] & physical position [5..0] |
sample 1 data [15..8] | sample 1 data [7..4] & sample 2 data [3..0] |
sample 2 data [15..8] | sample 3 data [7..0] |
sample 3 data [15..12] & sample 4 data [11..8] | sample 4 data [7..0] |
... | ... |
sample 31 data [15..12] & sample 32 data [11..8] | sample 32 data [7..0] |
0x0A | 0x5A |
CRC | packet footer |
2nd 1 Byte1 [15..8] | 1st 1 Byte1 [7..0] |
---|---|
0xE0 | channel number [7..0] |
0x0[15..12] & trigger arrival time 1 [11..8] | trigger arrival time 1 [7..0] |
0x0[15..12] & trigger arrival time 2 [11..8] | trigger arrival time 2 [7..0] |
0x0[15..12] & logical position [11..8] | logical position [7..6] & physical position [5..0] |
sample 1 data [11..8] | sample1 data [7..0] |
sample 2 data [11..8] | sample2 data [7..0] |
... | ... |
sample 32 data [11..8] | sample 32 data [7..0] |
0x0A | 0x5A |
0xFE | 0xCA |
... | ... |
0xE0 | channel number [7..0] |
0x0[15..12] & trigger arrival time 1 [11..8] | trigger arrival time 1 [7..0] |
0x0[15..12] & trigger arrival time 2 [11..8] | trigger arrival time 2 [7..0] |
0x0[15..12] & logical position [11..8] | logical position [7..6] & physical position [5..0] |
sample 1 data [11..8] | sample1 data [7..0] |
sample 2 data [11..8] | sample2 data [7..0] |
... | ... |
sample 32 data [11..8] | sample 32 data [7..0] |
0x0A | 0x5A |
0xFE | 0xCA |
I was able to get a conda environment to have root and some machine learning libraries at the same time. It took a few attempts because there's some nuance. First off, the ML libraries are a few versions of python behind, so I had to use python 3.10 (as oppose to 3.12). Second, I had to use the correct keywords when building the environment:
conda create --name root_env -c conda-forge -c root python=3.10 cudatoolkit=11.8 numpy matplotlib scikit-learn pytorch=2.1 torchvision tensorflow jupyter
conda create --name root_env -c conda-forge -c root python=3.10 cudatoolkit=11.8 numpy matplotlib scikit-learn pytorch=2.1 torchvision tensorflow jupyter
ROOT seemed to not want to install, so I tried it again
conda install -c conda-forge root
conda install -c conda-forge root
and it seemed to install on the second pass. This notably doesn't include torch audio, if that's needed.
Afterwards you can test some of the installations:
python -c "import torch; print(torch.cuda.is_available())" python -c "import tensorflow as tf; print(tf.__version__)" python -c "import sklearn; print(sklearn.__version__)" python -c "import ROOT; print(ROOT.__version__)
python -c "import torch; print(torch.cuda.is_available())"
python -c "import tensorflow as tf; print(tf.__version__)"
python -c "import sklearn; print(sklearn.__version__)"
python -c "import ROOT; print(ROOT.__version__)
Judging by this plot, I'm pretty sure we're in the 16-bit "expanded" data because I see 8 bytes, then data, then a footer byte (0xFA5A). This footer byte does not match the image Marcus sent us but does match the input parameters to the HDSoC class:
class HDSoCParser(Parser): def __init__(self, params): super().__init__(params) self._stop_word = params.get("stop_word", b"\xfa\x5a") if isinstance(self._stop_word, str): self._stop_word = bytes.fromhex(self._stop_word) self._chan_mask = params.get("chanmask", 0x3F) self._chan_shift = params.get("chanshift", 0) self._abs_wind_mask = params.get("abs_wind_mask", 0x3F) self._evt_wind_mask = params.get("evt_wind_mask", 0x3F) self._evt_wind_shift = params.get("evt_wind_shift", 6) self._headers = params.get("headers", 4) self._timing_mask = params.get("timing_mask", 0xFFF) self._timing_shift = params.get("timing_mask", 12) self._packet_size = 72
class HDSoCParser(Parser):
def __init__(self, params):
super().__init__(params)
self._stop_word = params.get("stop_word", b"\xfa\x5a")
if isinstance(self._stop_word, str):
self._stop_word = bytes.fromhex(self._stop_word)
self._chan_mask = params.get("chanmask", 0x3F)
self._chan_shift = params.get("chanshift", 0)
self._abs_wind_mask = params.get("abs_wind_mask", 0x3F)
self._evt_wind_mask = params.get("evt_wind_mask", 0x3F)
self._evt_wind_shift = params.get("evt_wind_shift", 6)
self._headers = params.get("headers", 4)
self._timing_mask = params.get("timing_mask", 0xFFF)
self._timing_shift = params.get("timing_mask", 12)
self._packet_size = 72
I had to fill in some blanks, but I think I was able to correctly reconstruct the channel, time, and samples of a 1040 byte UDP package (not really sure what logical and physical position are):
{'Channel': 0, 'Trigger Time': 16031077, 'Logical Position': 0, 'Physical Position': 29, 'Samples': [1496, 1511, 1503, 1515, 1474, 1489, 1492, 1470, 1488, 1490, 1486, 1467, 1464, 1466, 1480, 1494, 1464, 1506, 1497, 1485, 1489, 1489, 1496, 1516, 1508, 1444, 1482, 1464, 1494, 1486, 1489, 1559], 'Footer': (250, 90)} {'Channel': 0, 'Trigger Time': 16032109, 'Logical Position': 0, 'Physical Position': 7, 'Samples': [1489, 1498, 1504, 1514, 1488, 1497, 1490, 1488, 1492, 1508, 1468, 1490, 1491, 1471, 1480, 1461, 1467, 1496, 1512, 1498, 1468, 1461, 1505, 1500, 1492, 1487, 1520, 1494, 1504, 1495, 1494, 1518], 'Footer': (250, 90)} {'Channel': 0, 'Trigger Time': 16033142, 'Logical Position': 0, 'Physical Position': 48, 'Samples': [1509, 1455, 1442, 1519, 1528, 1481, 1515, 1494, 1506, 1497, 1480, 1494, 1464, 1477, 1489, 1483, 1509, 1511, 1491, 1484, 1494, 1488, 1441, 1468, 1472, 1494, 1474, 1466, 1467, 1486, 1527, 1493], 'Footer': (250, 90)} {'Channel': 0, 'Trigger Time': 16034175, 'Logical Position': 0, 'Physical Position': 27, 'Samples': [1478, 1506, 1492, 1520, 1458, 1495, 1467, 1469, 1476, 1504, 1512, 1486, 1468, 1494, 1518, 1504, 1491, 1523, 1516, 1494, 1502, 1461, 1452, 1443, 1491, 1520, 1512, 1495, 1488, 1500, 1473, 1522], 'Footer': (250, 90)} {'Channel': 0, 'Trigger Time': 16035207, 'Logical Position': 0, 'Physical Position': 5, 'Samples': [1503, 1490, 1445, 1512, 1491, 1491, 1496, 1496, 1443, 1505, 1514, 1502, 1483, 1442, 1496, 1490, 1490, 1494, 1502, 1512, 1503, 1488, 1508, 1491, 1490, 1499, 1485, 1454, 1458, 1474, 1486, 1511], 'Footer': (250, 90)} {'Channel': 0, 'Trigger Time': 16037273, 'Logical Position': 0, 'Physical Position': 25, 'Samples': [1479, 1518, 1501, 1525, 1494, 1484, 1494, 1457, 1505, 1492, 1507, 1500, 1467, 1486, 1506, 1513, 1501, 1490, 1494, 1488, 1465, 1477, 1468, 1496, 1493, 1520, 1515, 1486, 1478, 1510, 1488, 1541], 'Footer': (250, 90)} {'Channel': 0, 'Trigger Time': 16038305, 'Logical Position': 0, 'Physical Position': 3, 'Samples': [1468, 1467, 1507, 1541, 1503, 1508, 1516, 1477, 1492, 1470, 1524, 1512, 1504, 1496, 1499, 1517, 1465, 1505, 1499, 1471, 1480, 1495, 1496, 1517, 1498, 1518, 1464, 1466, 1503, 1492, 1493, 1544], 'Footer': (250, 90)} {'Channel': 0, 'Trigger Time': 16039338, 'Logical Position': 0, 'Physical Position': 44, 'Samples': [1531, 1441, 1488, 1482, 1494, 1488, 1506, 1489, 1471, 1486, 1477, 1482, 1470, 1488, 1442, 1463, 1490, 1516, 1500, 1472, 1486, 1514, 1484, 1515, 1487, 1513, 1512, 1494, 1486, 1490, 1513, 1486], 'Footer': (250, 90)} {'Channel': 0, 'Trigger Time': 16040371, 'Logical Position': 0, 'Physical Position': 23, 'Samples': [1510, 1486, 1510, 1522, 1486, 1488, 1493, 1457, 1475, 1492, 1539, 1508, 1491, 1470, 1551, 1518, 1504, 1512, 1492, 1468, 1481, 1490, 1499, 1512, 1500, 1490, 1515, 1499, 1516, 1513, 1468, 1552], 'Footer': (250, 90)} {'Channel': 0, 'Trigger Time': 16042436, 'Logical Position': 0, 'Physical Position': 42, 'Samples': [1538, 1468, 1467, 1492, 1464, 1477, 1459, 1478, 1488, 1486, 1464, 1464, 1475, 1466, 1480, 1479, 1468, 1504, 1492, 1503, 1486, 1484, 1447, 1486, 1478, 1488, 1490, 1487, 1480, 1478, 1488, 1467], 'Footer': (250, 90)} {'Channel': 0, 'Trigger Time': 16043469, 'Logical Position': 0, 'Physical Position': 21, 'Samples': [1502, 1476, 1481, 1517, 1449, 1460, 1465, 1469, 1468, 1502, 1508, 1492, 1464, 1506, 1510, 1495, 1478, 1512, 1504, 1530, 1478, 1477, 1480, 1496, 1473, 1497, 1491, 1487, 1462, 1484, 1462, 1494], 'Footer': (250, 90)} {'Channel': 0, 'Trigger Time': 16044502, 'Logical Position': 0, 'Physical Position': 0, 'Samples': [1500, 1517, 1477, 1494, 1476, 1502, 1489, 1463, 1486, 1464, 1467, 1491, 1481, 1493, 1474, 1480, 1512, 1524, 1483, 1482, 1496, 1494, 1432, 1490, 1488, 1513, 1484, 1511, 1477, 1520, 1510, 1537], 'Footer': (250, 90)} {'Channel': 0, 'Trigger Time': 16045535, 'Logical Position': 0, 'Physical Position': 41, 'Samples': [1483, 1497, 1470, 1494, 1440, 1485, 1488, 1494, 1459, 1458, 1493, 1486, 1496, 1495, 1499, 1510, 1486, 1493, 1507, 1469, 1487, 1478, 1517, 1489, 1498, 1494, 1488, 1508, 1474, 1511, 1470, 1490], 'Footer': (250, 90)}
{'Channel': 0, 'Trigger Time': 16031077, 'Logical Position': 0, 'Physical Position': 29, 'Samples': [1496, 1511, 1503, 1515, 1474, 1489, 1492, 1470, 1488, 1490, 1486, 1467, 1464, 1466, 1480, 1494, 1464, 1506, 1497, 1485, 1489, 1489, 1496, 1516, 1508, 1444, 1482, 1464, 1494, 1486, 1489, 1559], 'Footer': (250, 90)}
{'Channel': 0, 'Trigger Time': 16032109, 'Logical Position': 0, 'Physical Position': 7, 'Samples': [1489, 1498, 1504, 1514, 1488, 1497, 1490, 1488, 1492, 1508, 1468, 1490, 1491, 1471, 1480, 1461, 1467, 1496, 1512, 1498, 1468, 1461, 1505, 1500, 1492, 1487, 1520, 1494, 1504, 1495, 1494, 1518], 'Footer': (250, 90)}
{'Channel': 0, 'Trigger Time': 16033142, 'Logical Position': 0, 'Physical Position': 48, 'Samples': [1509, 1455, 1442, 1519, 1528, 1481, 1515, 1494, 1506, 1497, 1480, 1494, 1464, 1477, 1489, 1483, 1509, 1511, 1491, 1484, 1494, 1488, 1441, 1468, 1472, 1494, 1474, 1466, 1467, 1486, 1527, 1493], 'Footer': (250, 90)}
{'Channel': 0, 'Trigger Time': 16034175, 'Logical Position': 0, 'Physical Position': 27, 'Samples': [1478, 1506, 1492, 1520, 1458, 1495, 1467, 1469, 1476, 1504, 1512, 1486, 1468, 1494, 1518, 1504, 1491, 1523, 1516, 1494, 1502, 1461, 1452, 1443, 1491, 1520, 1512, 1495, 1488, 1500, 1473, 1522], 'Footer': (250, 90)}
{'Channel': 0, 'Trigger Time': 16035207, 'Logical Position': 0, 'Physical Position': 5, 'Samples': [1503, 1490, 1445, 1512, 1491, 1491, 1496, 1496, 1443, 1505, 1514, 1502, 1483, 1442, 1496, 1490, 1490, 1494, 1502, 1512, 1503, 1488, 1508, 1491, 1490, 1499, 1485, 1454, 1458, 1474, 1486, 1511], 'Footer': (250, 90)}
{'Channel': 0, 'Trigger Time': 16037273, 'Logical Position': 0, 'Physical Position': 25, 'Samples': [1479, 1518, 1501, 1525, 1494, 1484, 1494, 1457, 1505, 1492, 1507, 1500, 1467, 1486, 1506, 1513, 1501, 1490, 1494, 1488, 1465, 1477, 1468, 1496, 1493, 1520, 1515, 1486, 1478, 1510, 1488, 1541], 'Footer': (250, 90)}
{'Channel': 0, 'Trigger Time': 16038305, 'Logical Position': 0, 'Physical Position': 3, 'Samples': [1468, 1467, 1507, 1541, 1503, 1508, 1516, 1477, 1492, 1470, 1524, 1512, 1504, 1496, 1499, 1517, 1465, 1505, 1499, 1471, 1480, 1495, 1496, 1517, 1498, 1518, 1464, 1466, 1503, 1492, 1493, 1544], 'Footer': (250, 90)}
{'Channel': 0, 'Trigger Time': 16039338, 'Logical Position': 0, 'Physical Position': 44, 'Samples': [1531, 1441, 1488, 1482, 1494, 1488, 1506, 1489, 1471, 1486, 1477, 1482, 1470, 1488, 1442, 1463, 1490, 1516, 1500, 1472, 1486, 1514, 1484, 1515, 1487, 1513, 1512, 1494, 1486, 1490, 1513, 1486], 'Footer': (250, 90)}
{'Channel': 0, 'Trigger Time': 16040371, 'Logical Position': 0, 'Physical Position': 23, 'Samples': [1510, 1486, 1510, 1522, 1486, 1488, 1493, 1457, 1475, 1492, 1539, 1508, 1491, 1470, 1551, 1518, 1504, 1512, 1492, 1468, 1481, 1490, 1499, 1512, 1500, 1490, 1515, 1499, 1516, 1513, 1468, 1552], 'Footer': (250, 90)}
{'Channel': 0, 'Trigger Time': 16042436, 'Logical Position': 0, 'Physical Position': 42, 'Samples': [1538, 1468, 1467, 1492, 1464, 1477, 1459, 1478, 1488, 1486, 1464, 1464, 1475, 1466, 1480, 1479, 1468, 1504, 1492, 1503, 1486, 1484, 1447, 1486, 1478, 1488, 1490, 1487, 1480, 1478, 1488, 1467], 'Footer': (250, 90)}
{'Channel': 0, 'Trigger Time': 16043469, 'Logical Position': 0, 'Physical Position': 21, 'Samples': [1502, 1476, 1481, 1517, 1449, 1460, 1465, 1469, 1468, 1502, 1508, 1492, 1464, 1506, 1510, 1495, 1478, 1512, 1504, 1530, 1478, 1477, 1480, 1496, 1473, 1497, 1491, 1487, 1462, 1484, 1462, 1494], 'Footer': (250, 90)}
{'Channel': 0, 'Trigger Time': 16044502, 'Logical Position': 0, 'Physical Position': 0, 'Samples': [1500, 1517, 1477, 1494, 1476, 1502, 1489, 1463, 1486, 1464, 1467, 1491, 1481, 1493, 1474, 1480, 1512, 1524, 1483, 1482, 1496, 1494, 1432, 1490, 1488, 1513, 1484, 1511, 1477, 1520, 1510, 1537], 'Footer': (250, 90)}
{'Channel': 0, 'Trigger Time': 16045535, 'Logical Position': 0, 'Physical Position': 41, 'Samples': [1483, 1497, 1470, 1494, 1440, 1485, 1488, 1494, 1459, 1458, 1493, 1486, 1496, 1495, 1499, 1510, 1486, 1493, 1507, 1469, 1487, 1478, 1517, 1489, 1498, 1494, 1488, 1508, 1474, 1511, 1470, 1490], 'Footer': (250, 90)}
this looks very similar to the data I got from NaluScopes acquistions:
{'window_labels': [[], [], [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], []], 'evt_window_labels': [[], [], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], []], 'data': [array([], dtype=float64), array([], dtype=float64), array([2053, 2108, 2102, 2078, 2073, 2092, 2099, 2090, 2058, 2074, 2076, 2095, 2094, 2078, 2028, 2069, 2106, 2088, 2072, 2025, 2009, 2082, 2078, 2067, 2068, 2058, 2028, 2054, 2024, 2075, 2074, 2080, 2056, 2046, 2071, 2076, 2054, 2044, 2078, 2085, 2002, 2032, 2040, 2035, 2033, 2046, 2050, 2025, 2033, 2078, 2071, 2040, 2005, 2026, 2044, 2040, 2003, 2040, 2046, 2032, 2055, 2076, 2054, 2025, 2040, 2069, 2082, 2088, 2048, 2046, 2052, 1984, 1664, 1573, 1573, 1620, 1572, 1558, 1529, 1518, 1534, 1541, 1538, 1480, 1491, 1516, 1520, 1477, 1529, 1519, 1459, 1488, 1486, 1500, 1517, 1516, 1590, 1516, 1566, 1554, 1518, 1517, 1528, 1516, 1455, 1446, 1486, 1466, 1488, 1468, 1467, 1452, 1486, 1467, 1510, 1526, 1463, 1492, 1487, 1451, 1491, 1506, 1468, 1491, 1496, 1516, 1493, 1481, 1487, 1493, 1492, 1490, 1470, 1469, 1484, 1502, 1495, ... 1627, 1623, 1618, 1645, 1595, 1614, 1622, 1667, 1606, 1620, 1648, 1619, 1669, 1614, 1640, 1655, 1616, 1638, 1602, 1642, 1625, 1618, 1667, 1621, 1618, 1646, 1624, 1646], dtype=uint16), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64)], 'timing': [[], [], [10488814, 10488814, 10488814, 10488814, 10488814, 10488814, 10488814, 10488814, 10488814, 10488814, 10488814, 10488814, 10488814, 10488814, 10488814, 10488814], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], []], 'time': [array([], dtype=float64), array([], dtype=float64), array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, ... 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511]), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64)], 'created_at': 0, 'pkg_num': 0, 'event_num': 0, 'name': None}
{'window_labels': [[], [], [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
44, 45, 46, 47], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [],
[], [], [], [], [], [], [], [], [], [], [], [], [], []],
'evt_window_labels': [[], [], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [],
[], [], [], [], [], [], [], [], [], [], []], 'data': [array([],
dtype=float64), array([], dtype=float64), array([2053, 2108, 2102, 2078,
2073, 2092, 2099, 2090, 2058, 2074, 2076,
2095, 2094, 2078, 2028, 2069, 2106, 2088, 2072, 2025, 2009, 2082,
2078, 2067, 2068, 2058, 2028, 2054, 2024, 2075, 2074, 2080, 2056,
2046, 2071, 2076, 2054, 2044, 2078, 2085, 2002, 2032, 2040, 2035,
2033, 2046, 2050, 2025, 2033, 2078, 2071, 2040, 2005, 2026, 2044,
2040, 2003, 2040, 2046, 2032, 2055, 2076, 2054, 2025, 2040, 2069,
2082, 2088, 2048, 2046, 2052, 1984, 1664, 1573, 1573, 1620, 1572,
1558, 1529, 1518, 1534, 1541, 1538, 1480, 1491, 1516, 1520, 1477,
1529, 1519, 1459, 1488, 1486, 1500, 1517, 1516, 1590, 1516, 1566,
1554, 1518, 1517, 1528, 1516, 1455, 1446, 1486, 1466, 1488, 1468,
1467, 1452, 1486, 1467, 1510, 1526, 1463, 1492, 1487, 1451, 1491,
1506, 1468, 1491, 1496, 1516, 1493, 1481, 1487, 1493, 1492, 1490,
1470, 1469, 1484, 1502, 1495, ...
1627, 1623, 1618, 1645, 1595, 1614, 1622, 1667, 1606, 1620, 1648,
1619, 1669, 1614, 1640, 1655, 1616, 1638, 1602, 1642, 1625, 1618,
1667, 1621, 1618, 1646, 1624, 1646], dtype=uint16), array([],
dtype=float64), array([], dtype=float64), array([], dtype=float64),
array([], dtype=float64), array([], dtype=float64), array([],
dtype=float64), array([], dtype=float64), array([], dtype=float64),
array([], dtype=float64), array([], dtype=float64), array([],
dtype=float64), array([], dtype=float64), array([], dtype=float64),
array([], dtype=float64), array([], dtype=float64), array([],
dtype=float64), array([], dtype=float64), array([], dtype=float64),
array([], dtype=float64), array([], dtype=float64), array([],
dtype=float64), array([], dtype=float64), array([], dtype=float64),
array([], dtype=float64), array([], dtype=float64), array([],
dtype=float64), array([], dtype=float64), array([], dtype=float64),
array([], dtype=float64)], 'timing': [[], [], [10488814, 10488814, 10488814,
10488814, 10488814, 10488814, 10488814, 10488814, 10488814, 10488814,
10488814, 10488814, 10488814, 10488814, 10488814, 10488814], [], [], [], [],
[], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [],
[], [], [], [], [], []], 'time': [array([], dtype=float64), array([],
dtype=float64), array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
10, 11, 12,
13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103,
104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
117, 118, 119, 120, ...
468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480,
481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493,
494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506,
507, 508, 509, 510, 511]), array([], dtype=float64), array([],
dtype=float64), array([], dtype=float64), array([], dtype=float64),
array([], dtype=float64), array([], dtype=float64), array([],
dtype=float64), array([], dtype=float64), array([], dtype=float64),
array([], dtype=float64), array([], dtype=float64), array([],
dtype=float64), array([], dtype=float64), array([], dtype=float64),
array([], dtype=float64), array([], dtype=float64), array([],
dtype=float64), array([], dtype=float64), array([], dtype=float64),
array([], dtype=float64), array([], dtype=float64), array([],
dtype=float64), array([], dtype=float64), array([], dtype=float64),
array([], dtype=float64), array([], dtype=float64), array([],
dtype=float64), array([], dtype=float64), array([], dtype=float64)],
'created_at': 0, 'pkg_num': 0, 'event_num': 0, 'name': None}
It looks like python can handle about 7.5 MB/s per thread. The performance is slightly better for smaller "chunks" thrown into the algorithm. I.e. if I give the algorithm a times more data it will take a^{1.07} times longer to handle it (i.e the data rate will slow down).
Here is the non log version of the plot, just to help
Steps I follow to build the simulation:
git clone git@github.com:PIONEER-Experiment/main.git
git clone git@github.com:PIONEER-Experiment/main.git
~/.ssh
for your public key, for example:-v ~/.ssh/id_ed25519:/root/.ssh/id_ed25519
-v ~/.ssh/id_ed25519:/root/.ssh/id_ed25519
/simulation/checkout-branches.sh
to point to the branches you want, then run:git pull --recurse-submodules ./checkout-branches.sh
git pull --recurse-submodules
./checkout-branches.sh
./setup.sh -aelr
. Look at ./setup.sh --help
for information on what each flag does
"Properly" configured Gaudi option files.
all_dir.opts
//############################################################## // Job options file //============================================================== AuditorSvc.Auditors = { "ChronoAuditor" }; //-------------------------------------------------------------- //-------------------------------------------------------------- // Private Application Configuration options //-------------------------------------------------------------- ApplicationMgr.TopAlg = { "PIAMainDetRes" }; // Set output level threshold (2=DEBUG, 3=INFO, 4=WARNING, 5=ERROR, 6=FATAL ) MessageSvc.OutputLevel = 3; //-------------------------------------------------------------- // Event related parameters //-------------------------------------------------------------- ApplicationMgr.EvtMax = -1; ApplicationMgr.EvtSel = "NONE"; //-------------------------------------------------------------- // Other Service Options //-------------------------------------------------------------- PIAMainDetRes.ExecuteFastResponse = 1; PIAMainDetRes.ExecuteCaloDigitiser = 0; PIAMainDetRes.OutputFile = "all_dir.root"; PIAMainDetRes.OutputMode = 8064; SimReader.Files = {"/simulation/test/pimunu_run00000*.root 1"}; FastResponse.RequireTracker = False; FastResponse.RequireCalo = False;
//##############################################################
// Job options file
//==============================================================
AuditorSvc.Auditors = { "ChronoAuditor" };
//--------------------------------------------------------------
//--------------------------------------------------------------
// Private Application Configuration options
//--------------------------------------------------------------
ApplicationMgr.TopAlg = { "PIAMainDetRes" };
// Set output level threshold (2=DEBUG, 3=INFO, 4=WARNING, 5=ERROR, 6=FATAL )
MessageSvc.OutputLevel = 3;
//--------------------------------------------------------------
// Event related parameters
//--------------------------------------------------------------
ApplicationMgr.EvtMax = -1;
ApplicationMgr.EvtSel = "NONE";
//--------------------------------------------------------------
// Other Service Options
//--------------------------------------------------------------
PIAMainDetRes.ExecuteFastResponse = 1;
PIAMainDetRes.ExecuteCaloDigitiser = 0;
PIAMainDetRes.OutputFile = "all_dir.root";
PIAMainDetRes.OutputMode = 8064;
SimReader.Files = {"/simulation/test/pimunu_run00000*.root 1"};
FastResponse.RequireTracker = False;
FastResponse.RequireCalo = False;
all_rec.opts: (Without Sean's pattern finding)
//############################################################## // Job options file //============================================================== AuditorSvc.Auditors = { "ChronoAuditor" }; //-------------------------------------------------------------- //-------------------------------------------------------------- // Private Application Configuration options //-------------------------------------------------------------- ApplicationMgr.TopAlg = { "PIAMainRec" }; // Set output level threshold (2=DEBUG, 3=INFO, 4=WARNING, 5=ERROR, 6=FATAL ) MessageSvc.OutputLevel = 3; //-------------------------------------------------------------- // Event related parameters //-------------------------------------------------------------- ApplicationMgr.EvtMax = -1; ApplicationMgr.EvtSel = "NONE"; //-------------------------------------------------------------- // Other Service Options //-------------------------------------------------------------- PIAMainRec.InputFile = "all_dir*.root"; PIAMainRec.InputTree = "rec"; PIAMainRec.InputMode = 8064; PIAMainRec.OutputFile = "all_rec.root"; PIAMainRec.OutputMode = 1515392; //PIAMainRec.OutputMode = 0; PIAMainRec.ExecuteTruthTrackletFinder = 1; PIAMainRec.ExecuteTruthPatternFinder = 1; PIAMainRec.ExecutePionStopLocator = 1; PIAMainRec.ExecuteMudifDiscriminant = 1; PIAMainRec.ExecutePatternFinder = 0; PIAMainRec.ExecuteCaloSingleHitFinder = 0; PIAMainRec.ExecuteCaloClusterFinder = 1; PIAMainRec.ExecuteSummaryCollector = 1; PIAMainRec.ExecuteHistogrammer = 1; CaloClusterFinder.SpaceThr = 60; Histogrammer.filename = "all_hst.root"; Histogrammer.calib = "lyso_cal.txt"; Histogrammer.cuts = { "time TimeWindow all;-300 -5;5 500", "box AtarBox time 8 8 1.2 4.8", "fid FidTheta box 120", "1p SinglePattern fid", "3c TrippleDep 1p 2", "edep PromptLateEdep 1p 10.8 4.5", "kink AtarKink edep", "doca Doca kink 0.2 0.12", "init InitStopDEDX doca 6.4", "dedz DelayedDEDZ init 1.5", "tkr1 HasTracker fid", "tkr2 HasTracker dedz" };
//##############################################################
// Job options file
//==============================================================
AuditorSvc.Auditors = { "ChronoAuditor" };
//--------------------------------------------------------------
//--------------------------------------------------------------
// Private Application Configuration options
//--------------------------------------------------------------
ApplicationMgr.TopAlg = { "PIAMainRec" };
// Set output level threshold (2=DEBUG, 3=INFO, 4=WARNING, 5=ERROR, 6=FATAL )
MessageSvc.OutputLevel = 3;
//--------------------------------------------------------------
// Event related parameters
//--------------------------------------------------------------
ApplicationMgr.EvtMax = -1;
ApplicationMgr.EvtSel = "NONE";
//--------------------------------------------------------------
// Other Service Options
//--------------------------------------------------------------
PIAMainRec.InputFile = "all_dir*.root";
PIAMainRec.InputTree = "rec";
PIAMainRec.InputMode = 8064;
PIAMainRec.OutputFile = "all_rec.root";
PIAMainRec.OutputMode = 1515392;
//PIAMainRec.OutputMode = 0;
PIAMainRec.ExecuteTruthTrackletFinder = 1;
PIAMainRec.ExecuteTruthPatternFinder = 1;
PIAMainRec.ExecutePionStopLocator = 1;
PIAMainRec.ExecuteMudifDiscriminant = 1;
PIAMainRec.ExecutePatternFinder = 0;
PIAMainRec.ExecuteCaloSingleHitFinder = 0;
PIAMainRec.ExecuteCaloClusterFinder = 1;
PIAMainRec.ExecuteSummaryCollector = 1;
PIAMainRec.ExecuteHistogrammer = 1;
CaloClusterFinder.SpaceThr = 60;
Histogrammer.filename = "all_hst.root";
Histogrammer.calib = "lyso_cal.txt";
Histogrammer.cuts = {
"time TimeWindow all;-300 -5;5 500",
"box AtarBox time 8 8 1.2 4.8",
"fid FidTheta box 120",
"1p SinglePattern fid",
"3c TrippleDep 1p 2",
"edep PromptLateEdep 1p 10.8 4.5",
"kink AtarKink edep",
"doca Doca kink 0.2 0.12",
"init InitStopDEDX doca 6.4",
"dedz DelayedDEDZ init 1.5",
"tkr1 HasTracker fid",
"tkr2 HasTracker dedz"
};
all_rec.opts (with Sean's pattern finding)
//############################################################## // Job options file //============================================================== AuditorSvc.Auditors = { "ChronoAuditor" }; //-------------------------------------------------------------- //-------------------------------------------------------------- // Private Application Configuration options //-------------------------------------------------------------- ApplicationMgr.TopAlg = { "PIAMainRec" }; // Set output level threshold (2=DEBUG, 3=INFO, 4=WARNING, 5=ERROR, 6=FATAL ) MessageSvc.OutputLevel = 3; //-------------------------------------------------------------- // Event related parameters //-------------------------------------------------------------- ApplicationMgr.EvtMax = -1; ApplicationMgr.EvtSel = "NONE"; //-------------------------------------------------------------- // Other Service Options //-------------------------------------------------------------- PIAMainRec.InputFile = "all_dir*.root"; PIAMainRec.InputTree = "rec"; PIAMainRec.InputMode = 8064; PIAMainRec.OutputFile = "all_rec.root"; PIAMainRec.OutputMode = 1515392; //PIAMainRec.OutputMode = 0; PIAMainRec.ExecuteTruthTrackletFinder = 1; PIAMainRec.ExecuteTruthPatternFinder = 0; PIAMainRec.ExecutePatternFinder = 1; PatternFinder.UseTrackletTimeOrder = true; PatternFinder.DeltaRThreshold = 1.0; PIAMainRec.ExecutePionStopLocator = 1; PIAMainRec.ExecuteMudifDiscriminant = 1; PIAMainRec.ExecuteCaloSingleHitFinder = 0; PIAMainRec.ExecuteCaloClusterFinder = 1; PIAMainRec.ExecuteSummaryCollector = 1; PIAMainRec.ExecuteHistogrammer = 1; CaloClusterFinder.SpaceThr = 60; Histogrammer.filename = "all_hst.root"; Histogrammer.calib = "lyso_cal.txt"; Histogrammer.cuts = { "time TimeWindow all;-300 -5;5 500", "box AtarBox time 8 8 1.2 4.8", "fid FidTheta box 120", "1p SinglePattern fid", "3c TrippleDep 1p 2", "edep PromptLateEdep 1p 10.8 4.5", "kink AtarKink edep", "doca Doca kink 0.2 0.12", "init InitStopDEDX doca 6.4", "dedz DelayedDEDZ init 1.5", "tkr1 HasTracker fid", "tkr2 HasTracker dedz" };
//##############################################################
// Job options file
//==============================================================
AuditorSvc.Auditors = { "ChronoAuditor" };
//--------------------------------------------------------------
//--------------------------------------------------------------
// Private Application Configuration options
//--------------------------------------------------------------
ApplicationMgr.TopAlg = { "PIAMainRec" };
// Set output level threshold (2=DEBUG, 3=INFO, 4=WARNING, 5=ERROR, 6=FATAL )
MessageSvc.OutputLevel = 3;
//--------------------------------------------------------------
// Event related parameters
//--------------------------------------------------------------
ApplicationMgr.EvtMax = -1;
ApplicationMgr.EvtSel = "NONE";
//--------------------------------------------------------------
// Other Service Options
//--------------------------------------------------------------
PIAMainRec.InputFile = "all_dir*.root";
PIAMainRec.InputTree = "rec";
PIAMainRec.InputMode = 8064;
PIAMainRec.OutputFile = "all_rec.root";
PIAMainRec.OutputMode = 1515392;
//PIAMainRec.OutputMode = 0;
PIAMainRec.ExecuteTruthTrackletFinder = 1;
PIAMainRec.ExecuteTruthPatternFinder = 0;
PIAMainRec.ExecutePatternFinder = 1;
PatternFinder.UseTrackletTimeOrder = true;
PatternFinder.DeltaRThreshold = 1.0;
PIAMainRec.ExecutePionStopLocator = 1;
PIAMainRec.ExecuteMudifDiscriminant = 1;
PIAMainRec.ExecuteCaloSingleHitFinder = 0;
PIAMainRec.ExecuteCaloClusterFinder = 1;
PIAMainRec.ExecuteSummaryCollector = 1;
PIAMainRec.ExecuteHistogrammer = 1;
CaloClusterFinder.SpaceThr = 60;
Histogrammer.filename = "all_hst.root";
Histogrammer.calib = "lyso_cal.txt";
Histogrammer.cuts = {
"time TimeWindow all;-300 -5;5 500",
"box AtarBox time 8 8 1.2 4.8",
"fid FidTheta box 120",
"1p SinglePattern fid",
"3c TrippleDep 1p 2",
"edep PromptLateEdep 1p 10.8 4.5",
"kink AtarKink edep",
"doca Doca kink 0.2 0.12",
"init InitStopDEDX doca 6.4",
"dedz DelayedDEDZ init 1.5",
"tkr1 HasTracker fid",
"tkr2 HasTracker dedz"
};